package com.yuandian.po;

import com.yuandian.enums.MergeCalculateType;
import lombok.Data;

import java.util.List;
import java.util.Map;

/**
 * 说明：要归并的字段
 * @Author yanjun
 * @Date 2022/2/15 15:07
 */
@Data
public class MergeField {

    /**
     * 字段名
     */
    private String name;

    /**
     * 计算方式，不指定默认为相加
     */
    private MergeCalculateType calculateType;

    /**
     * 是否自定义字段的计算方式
     */
    private boolean isCustomCalculate;

    /**
     * 自定义计算接口
     */
    private CustomCalculate customCalculate;

	/**
	 * js脚本
	 */
	private String jsScript;

	public MergeField() {}

    public MergeField(String name) {
        this.name = name;
    }

    public MergeField(String name, MergeCalculateType calculateType) {
        this.name = name;
        this.calculateType = calculateType;
    }

    public MergeField(String name, CustomCalculate customCalculate) {
        this.name = name;
        this.isCustomCalculate = true;
        this.customCalculate = customCalculate;
    }

    @FunctionalInterface
    public interface CustomCalculate {

        /**
         * 自定义实现计算函数
         * @param map 结构集
         * @param inx 当前索引
         * @param labelTimeUsecList 时间标签戳集
         * @param scale 刻度
         * @return 计算结果
         */
        Double calculate(Map<String, List<Double>> map, Integer inx, List<Long> labelTimeUsecList, Integer scale);
    }
}
